Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / settingsSearchUtils.js

Displaying Raw • Download


meshchatx/src/frontend/js/settingsSearchUtils.js e5756d7ab065475a18acdcafc008a767fcff87e0 (e5756d7a) Text, 2.24 KB

T8b949e// SPDX-License-Identifier: 0BSD AND MIT

Tff7b72const Te6edf3ZW_RE Tff7b72= Ta5d6ff/[\u200B-\u200D\uFEFF]/gTb4b4b4;

T8b949e/**
* @param {unknown} raw
* @returns {string}
*/
Tff7b72export Tff7b72function Te6edf3normalizeSearchStringTb4b4b4(Te6edf3rawTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3raw Tff7b72== Tff7b72nullTb4b4b4) Tff7b72return Ta5d6ff""Tb4b4b4;
Tff7b72const Te6edf3s Tff7b72= Tffa657StringTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3ZW_RETb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3sTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Lowercase, strip combining marks for loose matching, normalize sharp s for German keyboards.
* @param {string} str
* @returns {string}
*/
Tff7b72export Tff7b72function Te6edf3foldForSearchTb4b4b4(Te6edf3strTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3strTb4b4b4) Tff7b72return Ta5d6ff""Tb4b4b4;
Tff7b72let Te6edf3out Tff7b72= Tffa657StringTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3out Tff7b72= Te6edf3outTb4b4b4.Te6edf3normalizeTb4b4b4(Ta5d6ff"NFD"Tb4b4b4)Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/\p{M}/guTb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// Unicode property escapes unsupported in very old runtimes
Tb4b4b4}
Tff7b72return Te6edf3outTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/\u00df/gTb4b4b4, Ta5d6ff"ss"Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {string} normalizedTrimmed
* @returns {string[]}
*/
Tff7b72export Tff7b72function Te6edf3tokenizeSettingsQueryTb4b4b4(Te6edf3normalizedTrimmedTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3normalizedTrimmedTb4b4b4) Tff7b72return Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72return Te6edf3normalizedTrimmed
Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff/\s+/Tb4b4b4)
Tb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3tTb4b4b4) Tb4b4b4=> Te6edf3foldForSearchTb4b4b4(Te6edf3tTb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3tTb4b4b4) Tb4b4b4=> Te6edf3tTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {string} text
* @param {(key: string) => string} translateFn
* @returns {string}
*/
Tff7b72function Te6edf3resolveSnippetTb4b4b4(Te6edf3textTb4b4b4, Te6edf3translateFnTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3textTb4b4b4) Tff7b72return Ta5d6ff""Tb4b4b4;
Tff7b72const Te6edf3s Tff7b72= Tffa657StringTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3sTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"="Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3foldForSearchTb4b4b4(Te6edf3sTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3content Tff7b72= Te6edf3sTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"."Tb4b4b4) Tff7b72? Te6edf3translateFnTb4b4b4(Te6edf3sTb4b4b4) Tff7b72: Te6edf3sTb4b4b4;
Tff7b72return Te6edf3foldForSearchTb4b4b4(Te6edf3contentTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Settings section search: empty query shows all; otherwise every whitespace-separated
* token must appear somewhere in the combined (translated) keyword haystack.
*
* @param {string[]} texts raw strings or i18n keys (keys contain a dot)
* @param {(key: string) => string} translateFn
* @param {string} rawQuery
* @returns {boolean}
*/
Tff7b72export Tff7b72function Te6edf3matchesSettingSearchTb4b4b4(Te6edf3textsTb4b4b4, Te6edf3translateFnTb4b4b4, Te6edf3rawQueryTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3normalized Tff7b72= Te6edf3normalizeSearchStringTb4b4b4(Te6edf3rawQueryTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3normalizedTb4b4b4) Tff7b72return Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3tokens Tff7b72= Te6edf3tokenizeSettingsQueryTb4b4b4(Te6edf3normalizedTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3tokensTb4b4b4.Te6edf3lengthTb4b4b4) Tff7b72return Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3haystack Tff7b72= Te6edf3texts
Tb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3tTb4b4b4) Tb4b4b4=> Te6edf3resolveSnippetTb4b4b4(Te6edf3tTb4b4b4, Te6edf3translateFnTb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3filterTb4b4b4(Tffa657BooleanTb4b4b4)
Tb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff" "Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3haystackTb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72return Te6edf3tokensTb4b4b4.Te6edf3everyTb4b4b4(Tb4b4b4(Te6edf3tokTb4b4b4) Tb4b4b4=> Te6edf3haystackTb4b4b4.Te6edf3includesTb4b4b4(Te6edf3tokTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────